<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    /* 
    error对象  new Error('message内部')  error.message

    表达式a.b的内部解析流程
    1. 查找a变量
      沿着作用域链查找, 如果没有找到, 报错: ReferenceError,否则得到变量的值
      准备找b属性, 但手里必须要有对象, 得到看a的值
        如果是null/undefined  ==> TypeError
        如果是number/string/boolean ==> 创建对应包装类型对象
        引用地址值 ==> 找到对应的对象
    2. 查找b属性
      先在对象自身上查找, 如果找到了返回它, 如果没有找到, 沿着原型链查找
        没有: 返回 undefined
        有: 返回它
    */

    function fn() {
      let a = {}
      console.log(a.b())
    }
    fn()
  </script>
</body>
</html>